/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.view;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import mx.its.dsw2.biblioteca.bl.DetallePrestamoBlLocal;
import mx.its.dsw2.biblioteca.bl.LibroBlLocal;
import mx.its.dsw2.biblioteca.bl.PrestamoBlLocal;
import mx.its.dsw2.biblioteca.bl.UsuarioBlLocal;
import mx.its.dsw2.biblioteca.modelo.DetallePrestamo;
import mx.its.dsw2.biblioteca.modelo.Libro;
import mx.its.dsw2.biblioteca.modelo.Prestamo;
import mx.its.dsw2.biblioteca.modelo.Usuario;

/**
 *
 * @author Maq.8
 */
@ManagedBean
@SessionScoped
public class LendsBean {
    @EJB
    private DetallePrestamoBlLocal detallePrestamoBl;
    @EJB
    private UsuarioBlLocal usuarioBl;
    @EJB
    private LibroBlLocal libroBl;
    @EJB
    private PrestamoBlLocal prestamoBl;
    
    
    private List<Prestamo> listLends;
    private List<DetallePrestamo> listLendDetails;
    private Prestamo lend;
    private DetallePrestamo lendDetail;
    private int idUsuarioSeleccionado;
    private List<Libro> listBooks;
    private String claveLibro;
    private boolean visible = false;
    private Usuario user;
    private String accion;

    public LendsBean() {
        lend = new Prestamo();
        listBooks = new ArrayList<Libro>();
    }

    public DetallePrestamo getLendDetail() {
        return lendDetail;
    }

    public void setLendDetail(DetallePrestamo lendDetail) {
        this.lendDetail = lendDetail;
    }
    
    public Usuario getUser() {
        return user;
    }

    public void setUser(Usuario user) {
        this.user = user;
    }

    public boolean isVisible() {
        return visible;
    }

    public void setInvisible(boolean visible) {
        this.visible = visible;
    }

    public List<Libro> getListBooks() {
        return listBooks;
    }

    public String getClaveLibro() {
        return claveLibro;
    }

    public void setClaveLibro(String claveLibro) {
        this.claveLibro = claveLibro;
    }

    public List<Prestamo> getListLends() {
        listLends = prestamoBl.getAll();
        return listLends;
    }

    public void setListLendDetails(List<DetallePrestamo> listLendDetails) {
        this.listLendDetails = listLendDetails;
    }

    public List<DetallePrestamo> getListLendDetails() {
        return listLendDetails;
    }
    
    public Prestamo getLend() {
        return lend;
    }

    public void setLend(Prestamo lend) {
        this.lend = lend;
    }

    public int getIdUsuarioSeleccionado() {
        return idUsuarioSeleccionado;
    }

    public void setIdUsuarioSeleccionado(int idUsuarioSeleccionado) {
        this.idUsuarioSeleccionado = idUsuarioSeleccionado;
    }

    public void agregarLibro(ActionEvent evt) {
        Libro l = libroBl.findBookForLend(claveLibro);
        if (l != null) {
            listBooks.add(l);
        }
    }

    public void mostrarContenido(ActionEvent evt) {
        visible = true;
        user = usuarioBl.findById(idUsuarioSeleccionado);
    }

    public void prepararEditar(ActionEvent evt) {
        accion = "Editar";
        int index = Integer.parseInt(evt.getComponent().getClientId().split(":")[2]);
        lend = listLends.get(index);
    }

    public String accionAceptar() {
        if (!listBooks.isEmpty()) {
            lend.setIdUsuario(usuarioBl.findById(idUsuarioSeleccionado));
            return "LendsConfirm";
        } else {
            return "LendsCreateEdit";
        }
    }

    public String llamadaPaginas() {
        String page = "";
        if (accion.equalsIgnoreCase("Editar") || accion.equalsIgnoreCase("Nuevo")) {
            page = "LendsCreateEdit";
        } else {
            if (accion.equalsIgnoreCase("Eliminar")) {
                page = "LendsList";
            }
        }
        return page;
    }

    public void eliminar(ActionEvent evt) {
        int index = Integer.parseInt(evt.getComponent().getClientId().split(":")[2]);
        listBooks.remove(index);

    }

    public String procesarAccion() {
        if (accion.equalsIgnoreCase("Nuevo")) {
            prestamoBl.register(lend, listBooks);
        } else {
            if (accion.equalsIgnoreCase("Editar")) {
            }
        }
        accion = "";
        return "LendsList";
    }

    public void prepararNuevo() {
        accion = "Nuevo";
        lend = new Prestamo();
        visible = false;
        lendDetail = new DetallePrestamo();
        listBooks=new ArrayList<Libro>();
    }
    
    public String mostrarDetalles() {
        visible = true;
        listLendDetails = detallePrestamoBl.getListDetailByLend(lend);
        return "LendsList";
    }
}
